home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / AmigaTalk / system / Keyboard.st < prev    next >
Encoding:
Text File  |  2004-01-31  |  2.6 KB  |  104 lines

  1. " --------------------------------------------------------------------- "
  2. " This class is NOT a full implementation of the keyboard.device, just  "
  3. " a way to get keystrokes from a Window.                                "
  4. ""
  5. "  WARNING:  You should know what you're doing to the Amiga OS before   "
  6. "            messing with this Class, or any other System Class!        "
  7. "" 
  8. " Bear in mind that the keyCodes returned by the getKey method are      "
  9. " RawKey codes, NOT ASCII!                                              "
  10. ""
  11. " Use this Class only if you need function keys, ESC, Help or the Arrow "
  12. " keys for some purpose, otherwise use the Console Class or the         "
  13. " NewGadgets or NewMenus class for getting vanilla keys.                "
  14. ""
  15. " Use the translateKey: method to get an ASCII value for the            "
  16. " RawKey (if there is one; '?' will be returned for non-ASCII keys)     "
  17. " --------------------------------------------------------------------- "
  18.  
  19. Class Key :Device ! keyCode keyQualifier aWindow !
  20. [
  21.    initialize 
  22.      keyCode      <- 0.
  23.      keyQualifier <- 0
  24. |
  25.    registerTo: thisWindow
  26.  
  27.      " Which Window will be the focus of your keyboard activity? "
  28.  
  29.      aWindow <- thisWindow
  30. |
  31.    getRawKey
  32.      ^ keyCode <- <primitive 222 1 0 self>
  33. |
  34.    translateKey: aKeyCode
  35.  
  36.      (self keyShifted)
  37.         ifTrue:  [^ <primitive 222 1 1 aKeyCode true>]
  38.         ifFalse: [^ <primitive 222 1 1 aKeyCode false>]
  39. |
  40.    getVanillaKey
  41.      ^ keyCode <- <primitive 222 1 2 self>
  42. |
  43.    keyCode 
  44.      ^ keyCode
  45. |
  46.    keyQualifiers
  47.      ^ keyQualifier     
  48. |
  49.    keyShifted ! mask !
  50.    
  51.      mask <- <primitive 23 keyQualifier (self leftShift + self rightShift + self capsLock)>.
  52.  
  53.      ^ (mask ~= 0)
  54. |
  55.    keyControlled ! mask !
  56.      mask <- <primitive 23 keyQualifier (self control)>.
  57.  
  58.      ^ (mask ~= 0)
  59. |
  60.    keyAlternated ! mask !
  61.      mask <- <primitive 23 keyQualifier (self leftAlt + self rightAlt)>.
  62.      
  63.      ^ (mask ~= 0)
  64. |
  65.    leftShift
  66.      ^ 1       "IEQUALIFIER_LSHIFT"
  67. |
  68.    rightShift
  69.      ^ 2       "IEQUALIFIER_RSHIFT"
  70. |
  71.    capsLock
  72.      ^ 4       "IEQUALIFIER_CAPSLOCK"
  73. |
  74.    control
  75.      ^ 8       "IEQUALIFIER_CONTROL"
  76. |
  77.    leftAlt
  78.      ^ 16r10   "IEQUALIFIER_LALT"
  79. |
  80.    rightAlt
  81.      ^ 16r20   "IEQUALIFIER_RALT"
  82. |
  83.    leftAmiga
  84.      ^ 16r40   "IEQUALIFIER_LCOMMAND"
  85. |
  86.    rightAmiga
  87.      ^ 16r80   "IEQUALIFIER_RCOMMAND"
  88. |
  89.    leftMouseButton
  90.      ^ 16r4000 "IEQUALIFIER_LEFTBUTTON"
  91. |
  92.    rightMouseButton
  93.      ^ 16r2000 "IEQUALIFIER_RBUTTON"
  94. |
  95.    middleMouseButton
  96.      ^ 16r1000 "IEQUALIFIER_MIDBUTTON"
  97. |
  98.    numericPad
  99.      ^ 16r100  "IEQUALIFIER_NUMERICPAD"
  100. |
  101.    repeatKey
  102.      ^ 16r200  "IEQUALIFIER_REPEAT"
  103. ]
  104.